home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / LINUX / TTY_LDIS.{44 < prev    next >
Text File  |  1999-09-17  |  5KB  |  139 lines

  1. #ifndef _LINUX_TTY_LDISC_H
  2. #define _LINUX_TTY_LDISC_H
  3.  
  4. /*
  5.  * This structure defines the interface between the tty line discpline
  6.  * implementation and the tty routines.  The following routines can be
  7.  * defined; unless noted otherwise, they are optional, and can be
  8.  * filled in with a null pointer.
  9.  *
  10.  * int    (*open)(struct tty_struct *);
  11.  *
  12.  *     This function is called when the line discpline is associated
  13.  *     with the tty.  The line discpline can use this as an
  14.  *     opportunity to initialize any state needed by the ldisc routines.
  15.  * 
  16.  * void    (*close)(struct tty_struct *);
  17.  *
  18.  *    This function is called when the line discpline is being
  19.  *     shutdown, either because the tty is being closed or because
  20.  *     the tty is being changed to use a new line discpline
  21.  * 
  22.  * void    (*flush_buffer)(struct tty_struct *tty);
  23.  *
  24.  *     This function instructs the line discipline to clear its
  25.  *     buffers of any input characters it may have queued to be
  26.  *     delivered to the user mode process.
  27.  * 
  28.  * ssize_t (*chars_in_buffer)(struct tty_struct *tty);
  29.  *
  30.  *     This function returns the number of input characters the line
  31.  *    iscpline may have queued up to be delivered to the user mode
  32.  *    process.
  33.  * 
  34.  * ssize_t (*read)(struct tty_struct * tty, struct file * file,
  35.  *           unsigned char * buf, size_t nr);
  36.  *
  37.  *     This function is called when the user requests to read from
  38.  *     the tty.  The line discpline will return whatever characters
  39.  *     it has buffered up for the user.  If this function is not
  40.  *     defined, the user will receive an EIO error.
  41.  * 
  42.  * ssize_t (*write)(struct tty_struct * tty, struct file * file,
  43.  *             const unsigned char * buf, size_t nr);
  44.  *
  45.  *     This function is called when the user requests to write to the
  46.  *     tty.  The line discpline will deliver the characters to the
  47.  *     low-level tty device for transmission, optionally performing
  48.  *     some processing on the characters first.  If this function is
  49.  *     not defined, the user will receive an EIO error.
  50.  * 
  51.  * int    (*ioctl)(struct tty_struct * tty, struct file * file,
  52.  *          unsigned int cmd, unsigned long arg);
  53.  *
  54.  *    This function is called when the user requests an ioctl which
  55.  *     is not handled by the tty layer or the low-level tty driver.
  56.  *     It is intended for ioctls which affect line discpline
  57.  *     operation.  Not that the search order for ioctls is (1) tty
  58.  *     layer, (2) tty low-level driver, (3) line discpline.  So a
  59.  *     low-level driver can "grab" an ioctl request before the line
  60.  *     discpline has a chance to see it.
  61.  * 
  62.  * void    (*set_termios)(struct tty_struct *tty, struct termios * old);
  63.  *
  64.  *     This function notifies the line discpline that a change has
  65.  *     been made to the termios stucture.
  66.  * 
  67.  * int    (*poll)(struct tty_struct * tty, struct file * file,
  68.  *           poll_table *wait);
  69.  *
  70.  *     This function is called when a user attempts to select/poll on a
  71.  *     tty device.  It is solely the responsibility of the line
  72.  *     discipline to handle poll requests.
  73.  *
  74.  * void    (*receive_buf)(struct tty_struct *, const unsigned char *cp,
  75.  *                char *fp, int count);
  76.  *
  77.  *     This function is called by the low-level tty driver to send
  78.  *     characters received by the hardware to the line discpline for
  79.  *     processing.  <cp> is a pointer to the buffer of input
  80.  *     character received by the device.  <fp> is a pointer to a
  81.  *     pointer of flag bytes which indicate whether a character was
  82.  *     received with a parity error, etc.
  83.  * 
  84.  * int    (*receive_room)(struct tty_struct *);
  85.  *
  86.  *     This function is called by the low-level tty driver to
  87.  *     determine how many characters the line discpline can accept.
  88.  *     The low-level driver must not send more characters than was
  89.  *     indicated by receive_room, or the line discpline may drop
  90.  *     those characters.
  91.  * 
  92.  * void    (*write_wakeup)(struct tty_struct *);
  93.  *
  94.  *     This function is called by the low-level tty driver to signal
  95.  *     that line discpline should try to send more characters to the
  96.  *     low-level driver for transmission.  If the line discpline does
  97.  *     not have any more data to send, it can just return.
  98.  */
  99.  
  100. #include <linux/fs.h>
  101. #include <linux/wait.h>
  102.  
  103. struct tty_ldisc {
  104.     int    magic;
  105.     char    *name;
  106.     int    num;
  107.     int    flags;
  108.     /*
  109.      * The following routines are called from above.
  110.      */
  111.     int    (*open)(struct tty_struct *);
  112.     void    (*close)(struct tty_struct *);
  113.     void    (*flush_buffer)(struct tty_struct *tty);
  114.     ssize_t    (*chars_in_buffer)(struct tty_struct *tty);
  115.     ssize_t    (*read)(struct tty_struct * tty, struct file * file,
  116.             unsigned char * buf, size_t nr);
  117.     ssize_t    (*write)(struct tty_struct * tty, struct file * file,
  118.              const unsigned char * buf, size_t nr);    
  119.     int    (*ioctl)(struct tty_struct * tty, struct file * file,
  120.              unsigned int cmd, unsigned long arg);
  121.     void    (*set_termios)(struct tty_struct *tty, struct termios * old);
  122.     unsigned int (*poll)(struct tty_struct *, struct file *,
  123.                  struct poll_table_struct *);
  124.     
  125.     /*
  126.      * The following routines are called from below.
  127.      */
  128.     void    (*receive_buf)(struct tty_struct *, const unsigned char *cp,
  129.                    char *fp, int count);
  130.     int    (*receive_room)(struct tty_struct *);
  131.     void    (*write_wakeup)(struct tty_struct *);
  132. };
  133.  
  134. #define TTY_LDISC_MAGIC    0x5403
  135.  
  136. #define LDISC_FLAG_DEFINED    0x00000001
  137.  
  138. #endif /* _LINUX_TTY_LDISC_H */
  139.